enum MomentumWaveProportion{ mwNothing = -1, mwAll, mwHalf };

ref class MomentumWaveOptions;
ref class MomentumWave : public StrategyAbstract
{
public:
	MomentumWave(Symbol ^owner, MomentumWaveOptions ^options, float delta, int steps, float triggerPrice, float stopLossPrice, Side side);

protected:

	int triggerOrderID;
	bool triggerActivated;
	int triggerOrderQuantity;
	int aboveStepOrderID;
	int belowStepOrderID;
	int aboveOrderQuantity;
	int belowOrderQuantity;
	int limit1_OrderID;
	int limit1_OrderQuantity;
	int limit2_OrderID;
	bool limit2_IsActivated;

	int curStep;
	float abovePrice;
	float belowPrice;
	float profit1_Price;
	float profit2_Price;

	// User Input
	float delta;
	int steps;
	float triggerPrice;
	float stopLossPrice;
	Side side;

	virtual void HistoryBarsCompleted() override;
	virtual void NewBarAdded( Bar ^barInformation ) override;
	virtual void NewMarketData( MarketDataTypes whatChanged, float price ) override;
	virtual void OrderStatusChanged( int orderIndex, OrderData ^orderData, bool firstTimeThatGotQuantity ) override;

protected:
};

// ****************************************************************************************************

ref class MomentumWaveOptions : public StrategyAbstractOptions
{
public:
	float profit1_Destination;
	float profit2_Destination;
	MomentumWaveProportion profit1_Proportion;
	MomentumWaveProportion profit2_Proportion;
	int riskInDollar;
	int firstQuantity;
	int quantityToAdd;

	virtual void SetToDefault() override;
	MomentumWaveOptions^ Clone();

};